Подключаем lirc к любой программе
Опубликовано 5 Февраль 2013 - 18:29 пользователем bivМы живем не в том мире, в котором хотели бы жить. Хотя порой для ощущений идеальности нужно не так и много. И ни для кого не секрет, что иногда от какой-либо программы хочется той функциональности, которую она предоставить не может.
И дело даже не в несовершенстве конкретной программы или узости взглядов на мир разработчиков данного программного продукта, а скорее в нестандартных запросах, которые могут возникнуть во время использования таковой. С другой стороны слово стандарт не является отображением желаний и потребностей тех, на кого рассчитан продукт. Так происходит потому, что все мы разные, хоть и похожи друг на друга.
В один прекрасный день мне захотелось почитать одну занятную книженцию, но электронная книжка была занята моей горячо любимой женой. Однако под рукой У меня имелся компьютер, настроенный на параллельный вывод на монитор и телевизор, на котором весьма удобно посмотреть один-другой фильмец, лежа в уютной постели. Так же была настроена возможность управления программами при помощи ПДУ. В итоге я решил прикрутить управление с пульта к читалке FBReader.
Данную проблему можно несколькими способами:
- взять исходники и добавить в них нужную нам функциональность1;
- Использовать KRemoteControl (бывший KDELirc)2;
- Наваять на скорую руку "костыль".
Я решил использовать последний. Путем недолгого гугления в Яндексе обнаружилась замечательная софтина xdotool
, которая помогает отправлять команды в оконный интерфейс приложений3. Затем был написан простенький скрипт на perl, слушающий сокет lirc и отправляющий соответствующие команды.
- #!/usr/bin/perl
- use Socket;
- #открываем сокет
- #/var/run/lirc/lircd - у вас путь может отличаться.
- $end_until=0;
- until ($end_until)
- {
- $tmp = <LIRCD>;
- if ($tmp ne "")
- {
- #Завершение работы программы и скрипта
- if ($tmparr[2] eq "POWEROFF") //POWEROFF - название клавиши ПДУ
- {
- $end_until=1;
- `killall -s SIGQUIT FBReader`;
- }
- #Отправляется программе нажатие клавиши вверх
- if ($tmparr[2] eq "WORD_PREV")
- {
- `xdotool search "FBReader " windowactivate --sync key Up 2>/dev/null`;
- }
- #Отправляется программе нажатие клавиши вниз
- if ($tmparr[2] eq "WORD_NEXT")
- {
- `xdotool search "FBReader " windowactivate --sync key Down 2>/dev/null`;
- }
- #Отправляется программе нажатие клавиши "Page Up"
- if ($tmparr[2] eq "SKIP_PREV")
- {
- `xdotool search "FBReader " windowactivate --sync key Page_Up 2>/dev/null`;
- }
- #Отправляется программе нажатие клавиши "Page Down"
- if ($tmparr[2] eq "SKIP_NEXT")
- {
- `xdotool search "FBReader " windowactivate --sync key Page_Down 2>/dev/null`;
- }
- }
- }
Я не использовал эту возможность по трем причинам:
- Не у всех программ доступен исходный код.
- Я знаю не все языки программирования.
- Не люблю ручную сборку и необходимость следить за обновлениями, при этом каждый раз накладывать патч.
Тут привязка к KDE и DCOP. ↩
Советую почитать страничку http://www.ibm.com/developerworks/ru/library/x-xdotool/ ↩